package com.vhall.component.service.exam;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vhall.component.entity.exam.ExamAnswerEntity;
import com.vhall.component.entity.exam.dto.ExamAnswersDTO;
import com.vhall.component.entity.exam.dto.ExamDTO;
import com.vhall.component.entity.exam.dto.ExamInfoDTO;
import com.vhall.component.entity.exam.dto.ExamListDTO;
import com.vhall.component.entity.exam.vo.*;
import com.vhall.component.entity.page.vo.PageVO;
import com.vhall.component.plugin.common.support.Token;

import java.util.HashMap;

/**
 * @author lsl
 * @since 2021/6/15 18:08
 */
public interface ExamService {

    /**
     * 试卷创建
     *
     * @param vo        参数
     * @param accountId 登录信息
     * @return exam
     */
    ExamDTO paperCreate(Integer accountId, ExamPaperCreateReqVo vo);

    /**
     * 试卷详情查看
     *
     * @param accountId 登录信息
     * @param examId    试卷编号
     * @return exam
     */
    ExamDTO paperInfo(Integer accountId, Integer examId);

    /**
     * 考卷绑定 - 业务逻辑为复制一份, 并绑定
     *
     * @param token token
     * @param vo    view object
     * @return if bind
     */
    boolean paperBind(Token token, ExamVo vo);

    /**
     * 考卷复制
     *
     * @param accountId accountId
     * @param vo        vo
     * @return exam entity
     */
    ExamDTO paperCopy(Integer accountId, ExamPaperCopyReqVo vo);

    /**
     * 试卷详情查看
     *
     * @param accountId 登录用户
     * @param vo        试卷编号
     * @return page vo
     */
    PageVO<ExamDTO> paperList(Integer accountId, ExamPaperListReqVo vo);

    /**
     * 不知道这个是不是考试专用，阅卷用不用，这个
     *
     * @param accountId 用户ID
     * @param vo        param
     * @return info entity
     */
    ExamInfoDTO info(Integer accountId, ExamInfoVo vo);

    /**
     * 创建考试记录
     *
     * @param accountId account id
     * @param vo        param
     * @return exam entity
     */
    ExamDTO create(Integer accountId, ExamCreateReqVo vo);

    /**
     * 修改考试
     *
     * @param accountId account id
     * @param vo        param
     * @return exam entity
     */
    ExamDTO update(Integer accountId, ExamUpdateReqVo vo);

    /**
     * 试卷 获取列表
     *
     * @param vo param
     * @return page list
     */
    PageVO<ExamListDTO> list(ExamListReqVo vo);


    /**
     * 直播间-观众端-考试-列表
     *
     * @param vo param
     * @return page list
     */
    PageVO<ExamConsoleListRspVO> watchList(ExamWatchListReqVo vo);

    /**
     * 批阅列表
     *
     * @param vo param
     * @return page list
     */
    Page<ExamAnswerEntity> gradeList(ExamGradeListReqVo vo);

    /**
     * 试卷删除记录
     *
     * @param vo param
     * @return if delete
     */
    Boolean delete(Integer accountId, ExamDeleteReqVo vo);

    /**
     * 批阅
     *
     * @param vo param
     * @return if graded
     */
    Boolean graded(ExamGradeReqVo vo);

    /**
     * 批阅信息
     *
     * @param vo param
     * @return grade info
     */
    GradeInfoRspVO gradedInfo(ExamGradeInfoReqVo vo);

    /**
     * 考试 概况
     *
     * @param vo param
     * @return stat info
     */
    HashMap<String, Object> stat(ExamVo vo);

    /**
     * 回答 答案列表
     *
     * @param vo param
     * @return page list
     */
    PageVO<ExamAnswersDTO> answeredList(ExamAnswerListVo vo);

    /**
     * 导出答案
     *
     * @param vo param
     * @return if export success
     */
    Boolean exportAnswer(ExamAnswerExportReqVo vo);

    /**
     * 获取考试状态
     *
     * @param vo
     * @return
     */
    Integer examStatus(ExamListDTO vo);
}